home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / jmtl028c.lha / flolist.c < prev    next >
C/C++ Source or Header  |  1994-04-07  |  6KB  |  259 lines

  1.  
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. #include <time.h>
  7.  
  8. #include <exec/types.h>
  9. #include <exec/memory.h>
  10. #include <exec/execbase.h>
  11. #include <exec/ports.h>
  12. #include <exec/nodes.h>
  13. #include <exec/lists.h>
  14. #include <exec/devices.h>
  15. #include <exec/io.h>
  16. #include <exec/libraries.h>
  17.  
  18. #include "libraries/dosextens.h"
  19. #include "libraries/dos.h"
  20.  
  21. #include <intuition/intuition.h>
  22.  
  23. #include <dos/dos.h>
  24. #include <dos/dosextens.h>
  25.  
  26. #include <proto/exec.h>
  27. #include <proto/dos.h>
  28.  
  29. #include <utility/hooks.h>
  30.  
  31. #include "xferq/xferq.h"
  32. #include "xferq/xferq_pragmas.h"
  33.  
  34. struct Library *XferqBase;
  35.  
  36. ULONG __asm SHWCB(register __a0 struct Hook *hook,
  37.     register __a2 struct NetAddress *na, register __a1 struct TagItem *tags)
  38. {
  39.    void writevar(char *name, char *info);
  40.    void readvar(char *name, char *info);
  41.  
  42.    char info[10], variable[40];
  43.  
  44.    char temp[255];
  45.  
  46.    int number, minpri, maxpri, zone, net, node, point, togo, bad, busy;
  47.    char sys[40], var[50];
  48.  
  49.    char *astring, *domain=NULL;
  50.    long pri;
  51.  
  52.    readvar("minpri", temp);
  53.    if (!temp[0]) strcpy(temp, "50");
  54.    minpri = atoi(temp);
  55.  
  56.    readvar("maxpri", temp);
  57.    if (!temp[0]) strcpy(temp, "100");
  58.    maxpri = atoi(temp);
  59.  
  60.    astring = XfqPutAddressTags(na, XQ_Mandatory, XQADDR_ANYTHING,
  61.         XQ_Optional, XQADDR_ANYTHING,TAG_DONE);
  62.  
  63.    XfqExamObjectTags(na, XQ_Domain, &domain, XQ_Zone, &zone,
  64.       XQ_Net, &net, XQ_Node, &node, XQ_Point, &point, TAG_DONE);
  65.  
  66.    if ((zone) || (net))
  67.       sprintf(sys, "%d.%d.%d.%d.%s", zone, net, node, point, domain);
  68.    else
  69.       sprintf(sys, "%s", astring);
  70.  
  71.    sprintf(var, "JamTool/Togo.%s", sys);
  72.    readvar(var, temp);
  73.    if (!temp[0]) strcpy(temp, "0");
  74.    togo=atoi(temp);
  75.  
  76.    pri=XfqMaxSitePri(na);
  77.  
  78.    if(astring)
  79.    {
  80.       if ((pri >= minpri) && (pri <= maxpri) && (!togo))
  81.       {
  82.          readvar("JamTool/ToDial", info);
  83.          number = atoi(info)+1;
  84.          sprintf(info, "%d", number);
  85.          writevar("JamTool/ToDial", info);
  86.          sprintf(variable, "JamTool/ToDial-%d", number);
  87.          writevar(variable, astring);
  88.          sprintf(variable, "Env:JamTool/ToDial-%d", number+1);
  89.          remove(variable);
  90.       }
  91.       XfqDropObject(astring);
  92.    }
  93.  
  94.    if (togo)
  95.    {
  96.       sprintf(temp, "%d", togo-1);
  97.       writevar(var, temp);
  98.    }
  99.    else
  100.    {
  101.       sprintf(var, "JamTool/Bad.%s", sys);
  102.       readvar(var, temp);
  103.       if (!temp[0]) strcpy(temp, "0");
  104.       bad=atoi(temp);
  105.  
  106.       sprintf(var, "JamTool/Busy.%s", sys);
  107.       readvar(var, temp);
  108.       if (!temp[0]) strcpy(temp, "0");
  109.       busy=atoi(temp);
  110.  
  111.       togo=(((bad*3)+busy) / 6);
  112.  
  113.       sprintf(var, "JamTool/Togo.%s", sys);
  114.       sprintf(temp, "%d", togo);
  115.       if (togo)
  116.       {
  117.          writevar(var, temp);
  118.       }
  119.       else
  120.       {
  121.          sprintf(var, "Env:JamTool/Togo.%s", sys);
  122.          remove(var);
  123.       }
  124.    }
  125.    if(domain) XfqDropObject(domain);
  126.    return TRUE;
  127. }
  128.  
  129.  
  130. int flolist(char uucp)
  131. {
  132.    void writevar(char *name, char *info);
  133.    void readvar(char *name, char *info);
  134.  
  135.    int scandir(char *address);
  136.    char i;
  137.  
  138.    typedef ULONG (*HOOK_FUNC)();
  139.  
  140.    struct Session *sites;
  141.    struct Hook hook;
  142.  
  143.    FILE *lsys;
  144.  
  145.    long error;
  146.    char *emsg;
  147.  
  148.    char address[30], tmp[255];
  149.  
  150.    UnLock(CreateDir("Env:JamTool"));
  151.    system("delete >nil: env:jamtool/todial#?");
  152.  
  153.  
  154.    sites = XfqGetSiteList();
  155.    if (error = XfqGetError())
  156.    {
  157.        emsg = XfqErrorMsg(error);
  158.        printf("Failed due to %s\n", emsg);
  159.        XfqDropObject(emsg);
  160.    }
  161.    else
  162.    {
  163.        hook.h_Entry = (HOOK_FUNC)SHWCB;
  164.  
  165.        XfqWalkSessionCallBackTags(sites, XQ_CallBack, &hook, TAG_DONE);
  166.    }
  167.  
  168.    if (sites)
  169.    {
  170.        XfqDropObject(sites);
  171.    }
  172.  
  173.    if (uucp)
  174.    {
  175.       if ((lsys = fopen("uulib:l.sys", "r")) !=NULL)
  176.       {
  177.          while (fgets(tmp, 250, lsys) != NULL)
  178.          {
  179.             if ((tmp[0]=='#') || (tmp[0]==';') || (strlen(tmp) < 5)) continue;
  180.  
  181.             sscanf(tmp, "%s %s", address, tmp);
  182.  
  183.             for (i=0;i<=strlen(tmp);i++)
  184.                tmp[i]=toupper(tmp[i]);
  185.  
  186.             if (!strcmp(tmp, "ANY"))
  187.                scandir(address);
  188.          }
  189.          fclose(lsys);          
  190.       }
  191.    }
  192.    return 0;
  193. }
  194.  
  195.  
  196. int scandir(char *address)
  197. {
  198.    void writevar(char *name, char *info);
  199.    void readvar(char *name, char *info);
  200.  
  201.    char temp[30], info[30], directory[30];
  202.  
  203.    int i;
  204.  
  205.    struct FileLock       *my_lock;
  206.    struct FileInfoBlock  *my_info;
  207.  
  208.    my_info = (struct FileInfoBlock *) AllocMem (sizeof(struct FileInfoBlock),
  209.           MEMF_PUBLIC|MEMF_CLEAR);
  210.  
  211.    if (my_info == NULL) 
  212.    {
  213.       printf ("\nCannot allocate memory for FileInfoBlock!\n");
  214.       return(-1);
  215.    }
  216.  
  217.    strcpy(directory, "uuspool:");
  218.  
  219.    my_lock = (struct FileLock *)Lock(directory, ACCESS_READ);
  220.  
  221.    if (my_lock==NULL)
  222.    {
  223.       printf ("Cannot get a read lock on %s", directory);
  224.       FreeMem (my_info,sizeof(struct FileInfoBlock));
  225.       return(-1);
  226.    }
  227.  
  228.    strcpy(temp, "C.");
  229.  
  230.    for (i=0;i<=strlen(address);i++)
  231.       temp[i+2]=toupper(address[i]);
  232.  
  233.    Examine ((BPTR)my_lock, my_info);
  234.  
  235.    while (ExNext((BPTR)my_lock, my_info))
  236.    {
  237.       if (my_info->fib_DirEntryType >= 0) continue;
  238.  
  239.       for (i=0;i<=strlen(my_info->fib_FileName);i++)
  240.          my_info->fib_FileName[i]=toupper(my_info->fib_FileName[i]);
  241.  
  242.  
  243.       if (!(strncmp(my_info->fib_FileName, temp, strlen(address))))
  244.       {
  245.          readvar("JamTool/ToDial", info);
  246.          i = atoi(info)+1;
  247.          sprintf(info, "%d", i);
  248.          writevar("JamTool/ToDial", info);
  249.          sprintf(info, "JamTool/ToDial-%d", i);
  250.          writevar(info, address);
  251.          break;
  252.       }
  253.    }
  254.    
  255.    UnLock((BPTR) my_lock);
  256.    FreeMem (my_info,sizeof(struct FileInfoBlock));
  257.    return 0;
  258. }
  259.